package 登录界面;

import 游戏界面.GameJFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
//登录界面
public class Login extends JFrame implements MouseListener {
    //初始化账号密码
    static ArrayList<User> allUser=new ArrayList<>();
    //定义初始化账号密码
    static {
        allUser.add(new User("lijinlong","20030724"));
        allUser.add(new User("liqingfa","20031221"));
        allUser.add(new User("xiaowangyu","20030913"));
        allUser.add(new User("test","666"));
    }
    //定义登录按钮
    JButton login=new JButton();
    //定义注册按钮
    JButton register=new JButton();
    //定义用户名输入框
    JTextField username=new JTextField();
    //定义密码输入框
    JPasswordField password=new JPasswordField();
    //定义验证码输入框
    JTextField code=new JTextField();

    //显示正确的验证码
    JLabel rightCode=new JLabel();

    public Login(){
        //初始化界面
        initJFram();
        //初始化组件
        initView();
        //让界面显示出来
        this.setVisible(true);
    }
    //初始化组件
    public void initView(){
        //定义用户名文字
        Font usernameFontt=new Font(null,1,16);
        JLabel usernameText=new JLabel("用户名");
        //设置颜色
        usernameText.setForeground(Color.white);
        //将文字信息 usernameFontt 设置到 usernameText 当中
        usernameText.setFont(usernameFontt);
        //设置位置
        usernameText.setBounds(140,55,55,22);
        //将用户名添加界面当中
        this.getContentPane().add(usernameText);

        //定义用户名输入框
        username.setBounds(233,46,200,30);
        this.getContentPane().add(username);


        //定义密码文字
        Font passwordFont=new Font(null,1,16);
        JLabel passwordText=new JLabel("密码");
        //设置颜色
        passwordText.setForeground(Color.white);
        //将文字信息 usernameFontt 设置到 usernameText 当中
        passwordText.setFont(passwordFont);
        //设置位置
        passwordText.setBounds(197,95,40,22);
        //将用户名添加界面当中
        this.getContentPane().add(passwordText);

        //定义密码输入框
        password.setBounds(263,87,160,30);
        this.getContentPane().add(password);


        //定义验证码文字
        Font codeFont=new Font(null,1,16);
        JLabel codeText=new JLabel("验证码");
        //设置颜色
        codeText.setForeground(Color.white);
        //将文字信息 usernameFontt 设置到 usernameText 当中
        codeText.setFont(codeFont);
        //设置位置
        codeText.setBounds(215,142,55,22);
        //将用户名添加界面当中
        this.getContentPane().add(codeText);

        //定义验证码输入框
        code.setBounds(291,133,100,30);
        this.getContentPane().add(code);


        //CodeUtil获取正确的验证码getCode
        String codeStr=CodeUtil.getCode();
        Font rightCodeFont=new Font(null,1,15);

        //设置颜色
        rightCode.setForeground(Color.RED);
        //设置字体
        rightCode.setFont(rightCodeFont);
        //设置内存
        rightCode.setText(codeStr);
        //绑定事件
        rightCode.addMouseListener(this);
        //设置位置
        rightCode.setBounds(400,133,100,30);
        //添加到界面当中
        this.getContentPane().add(rightCode);


        //添加登录按钮
        login.setBounds(123,310,128,47);
        //添加背景图片
        login.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\登录按钮.png"));
        //清除边框
        login.setBorderPainted(false);
        //清除按钮的背景图片
        login.setContentAreaFilled(false);
        //绑定事件
        login.addMouseListener(this);
        this.getContentPane().add(login);

        //添加注册按钮
        register.setBounds(256,310,128,47);
        //添加背景图片
        register.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\注册按钮.png"));
        //清除边框
        register.setBorderPainted(false);
        //清除按钮的背景图片
        register.setContentAreaFilled(false);
        //绑定事件
        register.addMouseListener(this);
        this.getContentPane().add(register);

        //背景图片设置
        JLabel background=new JLabel(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\background.png"));
        background.setBounds(0,0,633,424);
        this.getContentPane().add(background);
    }

    //初始化界面
    public void initJFram(){
        //设置高宽
        this.setSize(633,423);
        //设置标题
        this.setTitle("斗地主游戏 V1.0登录界面");
        //设置关闭模式
        this.setDefaultCloseOperation(3);
        //居中
        this.setLocationRelativeTo(null);
        //置顶
        this.setAlwaysOnTop(true);
        //取消内部默认布局
        this.setLayout(null);
    }

    //点击
    @Override
    public void mouseClicked(MouseEvent e) {
        Object obj=e.getSource();
        //判断用户点击的按钮
        if(obj==login){
            //获取两个文本框的输入内容
            String usernameInput=username.getText();
            String passwordInput=password.getText();

            //获取用户输入验证码
            String codeInput=code.getText();

            //判断验证码是否为空
            if(codeInput.length()==0){
                showJDialog("验证码不能为空！");
                return;
            }

            //判断用户名和密码是否为空
            if(usernameInput.length()==0||passwordInput.length()==0){
                System.out.println("用户名或者密码为空!");
                return;
            }

            //判断验证码
            //equalsIgnoreCase 忽略大小写进行判断
            if(!(codeInput.equalsIgnoreCase(rightCode.getText()))){
                showJDialog("验证码输入错误!");
                return;
            }

            //验证用户名和密码是否相同
            /*
            将usernameInput和passwordInput封装为userInfo对象进行判断
             */
            User userInfo=new User(usernameInput,passwordInput);
            //contains是依赖equals方法判断的，所以需要重写equals方法
            if(allUser.contains((userInfo))){
                //关闭登录界面
                this.setVisible(false);
                //然后打开游戏界面
                new GameJFrame();
            }else{
                showJDialog("用户名或者密码错误!");
            }

        }else if(obj==register){
            System.out.println("点击了注册");
        }else if(obj==rightCode){
            //获取新的验证码
            String code=CodeUtil.getCode();
            rightCode.setText(code);
        }

    }
    //显示弹框
    public void showJDialog(String content){
        //创建一个弹框对象
        JDialog jDialog=new JDialog();
        //设置大小
        jDialog.setSize(200,150);
        //弹框置顶
        jDialog.setAlwaysOnTop(true);
        //弹框居中
        jDialog.setLocationRelativeTo(null);
        //弹框不关闭无法操作下面的界面
        jDialog.setModal(true);

        //创建warning对象管理文字并添加到弹框当中
        JLabel warning=new JLabel(content);
        //设置大小
        warning.setBounds(0,0,200,150);
        //添加
        jDialog.getContentPane().add(warning);
        //让痛弹框显示出来
        jDialog.setVisible(true);

    }


    //按住不松
    @Override
    public void mousePressed(MouseEvent e) {
        if(e.getSource()==login){
            login.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\登录按下.png"));
        }else if(e.getSource()==register){
            register.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\注册按下.png"));
        }
    }
    //松开按钮
    @Override
    public void mouseReleased(MouseEvent e) {
        if(e.getSource()==login){
            login.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\登录按钮.png"));
        }else if(e.getSource()==register){
            register.setIcon(new ImageIcon("F:\\Java(IJ)\\斗地主\\image\\注册按钮.png"));
        }
    }

    //鼠标划入
    @Override
    public void mouseEntered(MouseEvent e) {

    }

    //鼠标划出
    @Override
    public void mouseExited(MouseEvent e) {

    }
}
